]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
messageTray: Clone, clip & move the window_group when tray is toggled
authorDebarshi Ray <debarshir@gnome.org>
Wed, 8 Aug 2012 20:48:17 +0000 (22:48 +0200)
committerJasper St. Pierre <jstpierre@mecheye.net>
Sun, 19 Aug 2012 22:41:48 +0000 (18:41 -0400)
1) straddling windows get clipped at the monitor boundary
2) we move the bottom monitor and not the primary because that is
   where the tray is
3) to stop the wallpaper from the bottom monitor leaking into the
   primary, we adjust the clip as the clone animates up/down

https://bugzilla.gnome.org/show_bug.cgi?id=681392

js/ui/messageTray.js

index e135506a57a3f6b7d667dc2d9a69bab5acca910c..0ff4710c5756883f3a6f20d0841a6309f7f54c93 100644 (file)
@@ -1577,6 +1577,7 @@ const MessageTray = new Lang.Class({
         this._notificationRemoved = false;
         this._reNotifyAfterHideNotification = null;
         this._inFullscreen = false;
+        this._desktopClone = null;
 
         this._corner = new Clutter.Rectangle({ width: 1,
                                                height: 1,
@@ -2291,6 +2292,35 @@ const MessageTray = new Lang.Class({
                       time: ANIMATION_TIME,
                       transition: 'easeOutQuad'
                     });
+
+        // Don't move the windows up if we are in the overview.
+        if (this._overviewVisible)
+            return;
+
+        let bottomMonitor = Main.layoutManager.bottomMonitor;
+        let geometry = new Clutter.Geometry({ x: bottomMonitor.x,
+                                              y: bottomMonitor.y,
+                                              width: bottomMonitor.width,
+                                              height: bottomMonitor.height
+                                            });
+        this._desktopClone = new Clutter.Clone({ source: global.window_group, clip: geometry });
+        Main.uiGroup.insert_child_above(this._desktopClone, global.window_group);
+        this._desktopClone.x = 0;
+        this._desktopClone.y = 0;
+        this._desktopClone.show();
+
+        Tweener.addTween(this._desktopClone,
+                         { y: this._desktopClone.y - this.actor.height,
+                           time: ANIMATION_TIME,
+                           transition: 'easeOutQuad',
+                           onUpdate: Lang.bind(this, function() {
+                               let progress = -1 * this._desktopClone.y; // y is negative
+                               this._desktopClone.set_clip(geometry.x,
+                                                           geometry.y + progress,
+                                                           geometry.width,
+                                                           geometry.height - progress);
+                           })
+                         });
     },
 
     _hideTray: function() {
@@ -2299,6 +2329,27 @@ const MessageTray = new Lang.Class({
                       time: ANIMATION_TIME,
                       transition: 'easeOutQuad'
                     });
+
+        if (!this._desktopClone)
+            return;
+
+        let geometry = this._desktopClone.clip;
+        Tweener.addTween(this._desktopClone,
+                         { y: this._desktopClone.y + this.actor.height,
+                           time: ANIMATION_TIME,
+                           transition: 'easeOutQuad',
+                           onComplete: Lang.bind(this, function() {
+                               this._desktopClone.destroy();
+                               this._desktopClone = null;
+                           }),
+                           onUpdate: Lang.bind(this, function() {
+                               let progress = this.actor.height + this._desktopClone.y; // y is negative
+                               this._desktopClone.set_clip(geometry.x,
+                                                           geometry.y - progress,
+                                                           geometry.width,
+                                                           geometry.height + progress);
+                           })
+                         });
     },
 
     _onIdleMonitorWatch: function(monitor, id, userBecameIdle) {